#include<bits/stdc++.h>
#define ll long long
#define int ll
#define endl "\n"
#define pii pair<int,int>
#define mp(a,b) make_pair(a,b)
#define max(a,b) (a<b?b:a)
#define min(a,b) (a<b?a:b)
#define INF 0x3f3f3f3f
#define MOD 1000000007
#define i128 __int128
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
using namespace std;

void init_inv(int size,int mod);
void init_fac(int size,int mod);
int fp(int a,int b,int mod);
int C(int m,int n,int mod);
int A(int m,int n,int mod);

vector<int> inv;
vector<int> factory;

int proc(vector<int> &a,int s,int x){ 
    int n=a.size();
    vector<int> pre(n);
    for(int i=0;i<n;i++){ //极长段的前缀和
        pre[i]=a[i]+(i?pre[i-1]:0);
    }
    map<int,int> c;
    for(int i=0;i<n;i++){ //极长段前缀和每个出现值得频率
        c[pre[i]]++;
    }
    int res=0;
    int r=0;
    for(int l=0;l<n;l++){ //遍历l
        while(r<l||(r<n&&a[r]<x)){ //调整右指针为刚好等于x的位置或者为右边界
            c[pre[r]]--; //删去[0,r-1]的pre[pos]的次数
            r++;
        }
        int t=c[s+(i?pre[i-1]:0)]; //pre[pos]-pre[l-1]==s 即我们需要寻找 n>pos>=r时pre[pos]==pre[l-1]+s的出现次数
        res+=t;
    }
    return res;
}

void solve(){
    int n,s,x;
    cin>>n>>s>>x;
    vector<int> a(n+10);
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    int res=0;
    for(int i=1;i<=n;i++){ //l-r之间不可能出现digit>x 所以l-r只能出现在每段极长不含digit>x
        if(a[i]>x){
            continue;
        }
        int ei=i+1;
        while(ei<=n&&a[ei]<=x){ //第一层双指针将一整段极长不含digit>x段提出
            ei++;
        }
        vector<int> b(a.begin()+i,a.begin()+ei);
        res+=proc(b,s,x);
        i=ei-1;
    }
    cout<<res<<endl;
}

signed main(){
    int t;
    cin>>t;
    while(t--){
        solve();
    }
}

int fp(int a,int b,int mod){
    if(b==0){
        return 1;
    }
    int ret=1;
    while(b){
        if(b&1){
            ret=ret*a%mod;
        }
        a=a*a%mod;
        b>>=1;
    }
    return ret;
}
void init_fac(int size,int mod){
    factory.resize(size+10);
    factory[0]=1;
    for(int i=1;i<=size;i++){
        factory[i]=factory[i-1]*i%mod;
    }
}
void init_inv(int size,int mod){
    inv.resize(size+10);
    inv[1]=1;
    for(int i=2;i<=size;i++){
        inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    }
}
int C(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*((m-i+1)%mod)%mod*inv[i];
    }
    return ans;
}
int A(int m,int n,int mod){
    int ans=1;
    for(int i=1;i<=n;i++){
        ans=ans*(m-i+1)%mod;
    }
    return ans;
}
